The present invention relates to computer security and in particular to techniques for preventing the reverse engineering and/or other forms of attack on computer software.
Disassembling and mapping the flow of control between blocks of instructions in a computer program is by far the most common and easiest way for an attacker to reverse engineer and gain an understanding of the inner workings of a computer program. The mapping of the flow of control can produce a static control flow graph. In order to obtain this static control flow graph which shows the mapping of the flow of control between blocks, a disassembler has to perform two fundamental operations: (1) for each byte in the binary code, decide if this byte is part of an instruction or data and (2) map the flow of control between instructions. Techniques which impede or prevent this procedure can be used to prevent the reverse engineering of the software program. U.S. Pat. No. 7,779,270 describes an approach to obfuscate a computer program in a manner which impedes or prevents reverse engineering of the computer program.